package SpringDemo.IOC.com.junjie.framework.context.support;

import SpringDemo.IOC.com.junjie.framework.beans.factory.support.BeanDefinitionReader;
import SpringDemo.IOC.com.junjie.framework.beans.factory.support.BeanDefinitionRegistry;
import SpringDemo.IOC.com.junjie.framework.context.ApplicationContext;

import java.util.HashMap;
import java.util.Map;

/**
 * 抽象的非延迟加载的子类(抽象类)---由其子类决定采取哪种加载配置文件方式
 */
public abstract class AbstractApplicationContext implements ApplicationContext {

    //确保子类可以访问到Bean定义对象列表
    protected Map<String, Object> singletonMap = new HashMap<>();

    //由该类的具体子类决定采取那种配置文件解析方式
    protected BeanDefinitionReader beanDefinitionReader;

    //声明配置文件路径
    protected String config;

    @Override
    public void refresh() throws Exception {
        //获取注册表
        BeanDefinitionRegistry beanDefinitionRegistry = beanDefinitionReader.getBeanDefinitionRegistry();

        //加载Bean定义对象
        beanDefinitionReader.loadBeanDefinitions(config);

        //获取bean对象名称
        String[] beanDefinitionNames = beanDefinitionRegistry.getBeanDefinitionNames();

        for (String beanDefinitionName : beanDefinitionNames) {
            Object bean = getBean(beanDefinitionName);
            singletonMap.put(beanDefinitionName, bean);
        }
    }
}
